package utils;

import facade.Facade;

import java.util.Collection;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.Set;

import entidadesVO.*;

import javax.naming.InitialContext;

import utils.ZaraException;

public class ProxyModelo {
	
	private Facade facade = null;
	
	private InitialContext initialContect = null;
	
	private String naming = "AdministradorArticuloApp/FacadeBean/remote";
	
	public ProxyModelo() {
		inicializarContexto();
	}
	
	/**
	 * Obtiene una "referencia" al session bean administrador de productos
	 * @return el AdministradorProductos
	 */
	private Facade getFacade(){
		try{
			if(facade == null){
				//Obtencion de referencia del session bean dentro del servidor de aplicaciones
				facade = (Facade)initialContect.lookup(naming);
			}
		}catch(Exception ex){
			ex.printStackTrace();
		}
		return facade;
	}
	
	/**
	 * Se indica url del servidor de aplicaciones
	 *
	 */
	private void inicializarContexto() {
		try{
			Hashtable props = new Hashtable();
			props.put(InitialContext.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
			//Url completa de ubicacion del servidor de aplicaciones
			props.put(InitialContext.PROVIDER_URL,"jnp://127.0.0.1:1099");
			//Objeto del tipo InitialContext
			initialContect = new InitialContext(props);
		}catch(Exception ex){
			ex.printStackTrace();
		}
	}
	
	public void grabar(){
		getFacade().inicializar();
	}
	
	public void obtenerSolDists(){
		
		System.out.println("Solicitud de Distribucion para Buenos Aires");
		SolDistVO solDistVO;
		try {
			solDistVO = getFacade().getSolDist("Buenos Aires");
			System.out.println(solDistVO);
			System.out.println(solDistVO.getCentroDistribucion());
			
			System.out.println("Persisitiendo la SolDist");
			getFacade().persistirSolDist(solDistVO);
		} catch (ZaraException e) {
			e.printStackTrace();
		}
	}
	
	/*
	public void obtenerOFADS(){
		
		java.sql.Date date = java.sql.Date.valueOf( "2008-06-16" );
		
		ArticuloVO articuloVO = null;
		try {
			articuloVO = getFacade().getArticulo("404A");
		} catch (ZaraException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println("Articulo");
		System.out.println(articuloVO);
		System.out.println("Codigo");
		System.out.println(articuloVO.getCodigoArticuo());
		
		System.out.println("Articulos OFAD");
		Collection<ArticulosOFADVO> articulosOFADVO = new HashSet<ArticulosOFADVO>();
		articulosOFADVO.add(new ArticulosOFADVO(articuloVO, 180));
		System.out.println(articulosOFADVO);
		
		OFADVO ofadVO = new OFADVO(date);
		ofadVO.setArticulosOFAD(articulosOFADVO);
		System.out.println(ofadVO);
		
		try {
			getFacade().setOFAD(ofadVO);
		} catch (ZaraException e) {
			e.printStackTrace();
		}
	}*/
	
	public void obtenerPALCS(){
		
		java.sql.Date date = java.sql.Date.valueOf( "2008-06-16" );
		
		ArticuloVO articuloVO = new ArticuloVO();
		articuloVO.setReferencia("404A");
	
		TiendaVO tiendaVO = new TiendaVO();
		tiendaVO.setNombreTienda("La Plata");
		
		Set<ArticulosPALCVO> articulosPALCVO = new HashSet<ArticulosPALCVO>();
		articulosPALCVO.add(new ArticulosPALCVO(articuloVO, 20));
		
		PALCVO palcVO = new PALCVO(tiendaVO, date);
		palcVO.setArticulosPALC(articulosPALCVO);
		
		try {
			getFacade().setPALC(palcVO);
		} catch (ZaraException e) {
			e.printStackTrace();
		}
		
		System.out.println("Prueba Funcion Complicada");
		
		Collection<ArticuloVO> prueba_2;
		try {
			prueba_2 = getFacade().getArticulosPedidosPorNTiendas(2);
			System.out.println(prueba_2);
		} catch (ZaraException e) {
			e.printStackTrace();
		}
	}
	
	public void obtenerArticulos(){
		
		ArticuloComponentesVO ac1 = new ArticuloComponentesVO("cuero", 20);
		ArticuloComponentesVO ac2 = new ArticuloComponentesVO("ebano", 30);
		
		java.sql.Date date = java.sql.Date.valueOf( "2008-01-31" );
		RopaVO saco = new RopaVO("saco de cuero", 250, 10, "404A", "negro", "Sport", date, 1, "M", "Saco Sport", "Hombre", "India");
		saco.setMesDeDescuento(5);
		CentroDistribucionVO cd1 = new CentroDistribucionVO();
		cd1.setNombreCentroDistribucion("Buenos Aires");
		CentroDistribucionVO cd2 = new CentroDistribucionVO();
		cd2.setNombreCentroDistribucion("Montevideo");
		saco.addCentrosDeDistribucion(cd1);
		saco.addCentrosDeDistribucion(cd2);
		saco.addArticuloComponentes(ac1);
		saco.addArticuloComponentes(ac2);
		
		try {
			getFacade().setRopa(saco);
		} catch (ZaraException e) {
			e.printStackTrace();
		}
		
		MedidaVO medida = new MedidaVO("Metros", 20, 40, 30, null);	
		AccesorioVO mesa = new AccesorioVO("mesa cocina", 350, 10, "405R", "Marron", "Hogar", date, "Hogar", "Mesa de Boticario", medida, "Hogar", 4);
		mesa.addCentrosDeDistribucion(cd1);
		mesa.addCentrosDeDistribucion(cd2);
		mesa.addArticuloComponentes(ac2);
		
		try {
			getFacade().setAccesorio(mesa);
		} catch (ZaraException e) {
			e.printStackTrace();
		}
		
		Object[] prueba = null;
		try {
			prueba = getFacade().getArticulos().toArray();
		} catch (ZaraException e) {
			e.printStackTrace();
		}
		Object[] prueba_2 = null;
		try {
			prueba_2 = getFacade().getArticulosNuevos().toArray();
		} catch (ZaraException e) {
			e.printStackTrace();
		}
		Object[] prueba_3 = null;
		try {
			prueba_3 = getFacade().getCentrosDistribucion().toArray();
		} catch (ZaraException e) {
			e.printStackTrace();
		}
		
		System.out.println("getArticulos()");
		for (int i = 0; i < prueba.length; i ++){
			System.out.println((ArticuloVO)prueba[i]);
		}
		
		System.out.println("getArticulo(referencia)");
		ArticuloVO articuloVO;
		try {
			articuloVO = getFacade().getArticulo("405R");
			System.out.println(articuloVO);
		} catch (ZaraException e) {
			e.printStackTrace();
		}
		
		System.out.println("getArticulosNuevos()");
		if (prueba_2.length == 0){
			System.out.println("	No hay articulos Nuevos");
		}else{
			for (int i = 0; i < prueba_2.length; i ++){
				System.out.println((ArticuloVO)prueba_2[i]);
			}
		}
		
		System.out.println("getCentroDistribucion(nombreCentroDistribucion)");
		CentroDistribucionVO centroDistribucionVO;
		try {
			centroDistribucionVO = getFacade().getCentroDistribucion("Buenos Aires");
			System.out.println(centroDistribucionVO);
		} catch (ZaraException e) {
			e.printStackTrace();
		}
		
		System.out.println("getCentrosDistribucion()");
		if (prueba_3.length == 0){
			System.out.println("	No hay Centros de Distribucion");
		}else{
			for (int i = 0; i < prueba_3.length; i ++){
				System.out.println((CentroDistribucionVO)prueba_3[i]);
			}
		}
		
		Collection<ArticuloVO> prueba_fecha;
		try {
			prueba_fecha = getFacade().getArticulosMesRebaja();
			System.out.println(prueba_fecha);
		} catch (ZaraException e) {
			e.printStackTrace();
		}
	}
}
